﻿var isFound = 0;
var k = 0;


$(document).ready(function () {
    searchGeneral();
    // set focus;
    $('#keyword').focus();

    // set autocomplete
    //$('#keyword').autocomplete('Search_CS.ashx');

    // Luu lai option đang tìm 
    //selectOption('cboDichVu', $('#optSelected').val());

    /*  Khi nhấn enter thì search
    src: http://stackoverflow.com/questions/155188/trigger-button-click-with-javascript-on-enter-key-in-text-box
    */

    $("#keyword").keyup(function (event) {
        var keyword = $('#keyword').val();
        var url = '';
        if (event.keyCode == 13) {
            searchGeneral();
        }
    });

    // khi nhấn nút search
    $("#search").click(function () {
        searchGeneral();
    });

    /*
    $("#keyword").keypress(function () {

    });
    */
});

function isExistsComma(keyword) {
    for (i = 0; i < keyword.length; i++)
        if (keyword.substr(i, 1) == ',')
            return true;
    return false;
}
function searchGeneral() {
    var keyword = $('#keyword').val();
    var url = '';

    if (isExistsComma(keyword)) {
        url = search1(keyword);
    }
    else url = search2(keyword);
    //$('#loading').css('background','../Images/loadingruler.gif');
    $('#result').slideUp(300);
    document.getElementById('result').innerHTML = '';
    $.ajax({
        url: 'ajaxActions.aspx',
        type: 'GET',
        data: url,
        timeout: 30000,
        error: function () {
            alert('Có lỗi ở Server');
        },
        success: function (msg) {
            //$('#loading').css('background','');
            document.getElementById('result').innerHTML = msg;
            $('#result').show('500');
        }
    }); // Ajax

}
// =================================== SEARCH SIMPLE ==============================================================
/*
TỔNG QUAN VỀ THUÂT TOÁN search2 NÀY :
Dùng kỹ thuật trong javascript ở Browser, kích hoạt thuộc tính onkeypress để lấy MaDichVu trước trước dựa vào autocomplete.
+ Nhược điểm là không tương thích với các trình duyệt ==> Chuẩn hóa code javascript;
+ Người dùng không gõ mà paste keyword vào thì pó tay ( Xem như kỹ thuật lấy MaDichVu thất bại.
Các bước như sau :
if(Lấy được MaDichVu thông qua keyword của autocomplete){// LoạiDichVu!=null
Vd : Siêu thị Coopmart
Tách ra Từ khóa tiếp theo (trừ từ khóa dịch  vụ ra ) thành mảng = Coopmart = arr
if(rr[0]=='')
Tìm theo mã dich vụ. 
if(arr[] Chỉ có 1 từ(1 phần tử và khác null){
Quét cạn TenDiaDiem,Quan,Huyen,Phuong = arr[0] đó
Có thể dùng hàm filter minning text để lọc bớt tình trạng quơ đũa cả nắm như trên
return;
}
if(arr hơn 1 từ, nhiều từ)
VD : Siêu thị coopmart duong nguyen tri phuong quan 3
// tiến hành lọc table IndexList như bên dưới
if( mà loc khong co từ nào luôn )
{
tức là người ta có thể là nhập là ly Thai to, bigc. Có phường, or quận thì đã lọc xử lý ở trên
Đành quơ đũa cả nắm tiếp như chỉ TenDiaDiem và TenDuong Thôi
}
else{ // Nếu người dùng không nhập mà copy, hoặc họ không nhập các từ mình gài bẫy trước = autocomplete. Tức là lấy mã dich vụ thất bại
KHÓ NHẤT Ở BƯỚC NÀY - ÁP DỤNG THUẬT TOÁN CỦA TOÀN(NHƯNG RẤT LÂU - VÀ KẾT QUẢ KHÓ CHÍNH XÁC NHƯ MONG MUỐN)
Nếu mà keyword giống như trên thì cố gắn viết hàm phân tích được
Vd : Siêu thị duong nguyen kim, cua hang do go q.3
                                
Nhưng họ nhập là 
Uy ban nhan dan quan 3
Coopmart truong chinh
Lúc này làm sau nhận biết được coopmart là Siêu Thị, Truong Chinh là đường, Uy Ban nhân dân là tên dia diem.
}
                
        
        
*/
function search2(keyword) {
    // Nếu không tìm ma dich vu thì gán MaDichVu=null;

    var url;
    var MaDichVu;
    var strFind = keyword == null ? 'null' : keyword;
    var TenDiaDiem = 'null';
    var TenDuong = 'null';
    var TenQuan = 'null';
    var TenPhuong = 'null';
    var cmd = "cmd=search";

    /*Ok! đã xử lý xong hàm này, rắc rối tối qua*/
    var LoaiDichVu = getLoaiDichVu(keyword);

    if (LoaiDichVu != 'null') {
        var tmp = LoaiDichVu.split(','); // "20,7" ==> 20([0]) và 7([1])
        var start = tmp[1];
        keyword = $.trim(keyword.substr(tmp[1], keyword.length));
        MaDichVu = tmp[0];

        // xử lý keyword sao cho thông minh, nhậnt biết được keyword cung cấp những thông tin gì
        var arr = locdau(keyword).split(' ');

        // Nếu keyword tiếp theo(ngài từ khóa dịch vụ ra) rỗng
        if (arr == null || arr[0] == '') {
            // xử lý rỗng
            //alert('arr = null');
            document.getElementById('test').innerHTML = 'Chỉ tìm theo mã dịch vụ';
            url = cmd + "&MaDichVu=" + MaDichVu + "&TenDiaDiem=" + TenDiaDiem + "&TenDuong=" + TenDuong + "&TenPhuong=" + TenPhuong + "&TenQuan=" + TenQuan;
            //alert(url);
            return url;
        }
        if (arr.length == 1 && arr[0] != '') {
            //alert('arr.length=1 && arr[0]<>null');
            document.getElementById('test').innerHTML = 'Tìm dich vu theo ten, duong, quan, phuong rieng biệt=' + arr[0];
            //alert(MaDichVu);
            url = filterKeyword(arr, MaDichVu);
            //alert(url);
            return url;
        }
        // Nếu các từ khóa sau từ khóa dich vụ có nhiều khoảng trắng (arr.length > 1 )
        // Loc tu khoa tai day ===========================================
        return url = filterKeyword(arr, MaDichVu);
    }
    else {

        /* ==================================> QUA TẾT XỬ LÝ NẾU KO KỊP
        Lúc này có 2 trường hợp xẩy ra :
                                        
        ===>    Trường Hợp 1
        + Mẹo lấy MaDichVu  = thuộc tính onkeypress đã không thành công
        --> Người dùng họ không gõ keyword mà là paste toàn bộ keyword ở đâu đó.
        --> Không tương thích của browser bất kỳ.
        Nhưng ta vẫn xử lý được. Đó là dựa vào ý tưởng như trên. Thay vì không dùng onkeypress mà ta phân tách chuỗi để nhận diện LoạiDichVu
        + Các ví dụ :
        Siêu thị duong nguyen tat thanh quan 10.
        --> Chỉ viết thêm thuật toán nhận biết mã dịch vụ qua vài keywordArray đầu tiên
        Siêu thị keywordArray.length = 2 && ... ==> MaDichVu = 21 
        Cửa hàng đồ gỗ keywordArray.length = 2 && ...  ==> MaDichVu = ???
        Đồ gỗ
        Cửa hàng kim khí điện máy
        Kim khí
        Điện máy
        Cửa hàng thì search cho 2 loại dịch vụ : đồ gỗ và điện máy
        Cơ quan hành chính
        Ủy ban
        Tòa án
        Đại sứ quán
        Tổ dân phố
        ....
        Sau đó quơ đũa cả nắm các từ ở sau
        Còn các từ theo sao có thể ứng dụng hàm keywordFilter làm được ( nhưng phải có duong, phuong, quan)
                                                
        ==>     Trường Hợp 2 
        Người dùng có thể gõ là 
        coop mart 
        ==> keywordArray.length = 2. Nếu gõ là "coopmart" thì keywordArray.length = 1 đã xử lý ở trên
        Lý thái tổ
        Coopmart trường chinh
        Điện máy nguyễn kim
        Đồ gỗ cộng hòa
        Nhà trọ lý thái tổ
        Nhà trọ nguyễn văn cừ
                                                
        Có một số vấn đề nan giải ở đây :
        Làm sao mà phân biệt được đâu là tên địa điểm, đâu là đường, đâu là dịch vụ khi không có kí tự( dấu ",") hay key(các từ tduong,phuong,quan) nào để nhận biết.
        Vd : nhập vào Trịnh Công Sơn --> biết ông ta là nhạc sĩ
        Vd : Nhập vào Coopmart --> Biết đó là siêu thị ==> biết được với dữ liệu này bằng cách fix cứng.
                                                
        Thiên Hòa quận 12
        Nguyễn Kim Nguyễn Thi Minh Khai
        Nguyễn Kim Quan 1
                                                
        ==> ỨNG DỤNG THUẬT TOÁN CỦA TOÀN. NHƯNG TRONG THUẬT TOÁN ĐÓ PHẢI LIỆT KÊ CHI TIẾT HƠN NỮA, VỀ CÁC TEST KEY CỦA TỪ KHÓA NHẬP VÀO.
        Xử lý rất lâu. Hoán vị chập k của n phàn tử + tổ hợp + chỉnh hợp.
        Vd Thien Hoa Ly Thai To. Và tìm mỗi trường hợp đó trên all table !!! ==> khủng
        thien
        thien hoa    =============> ok
        thien hoa ly
        thien hoa ly thai
        thien hoa ly thai to
                                        
        hoa
        hoa ly
        hoa ly thai
        hoa ly thai to
                                        
        ly
        ly thai
        ly thai to =================> ok
                                        
        thai
        thai to
                                        
        to
                                        
        phải duyệt hết tất cả mới ra các trường hợ lý tưởng như
        ly thai to
        thien hoa
                                        
        ==> Làm sao biết lý thai tổ là đường, thiên hoa là tên địa điểm. 
        Mà tách đúng nhóm là cả một học thuật về data mining ( text mining)
        VD : Tai sao phải là Thiên Hòa chứ không phải là Thiên Hoa Ly ?????????????????????
        ...
        ...
        ...
        ========> Sau đây là một số code xử lý sơ sơ cho có : */
        keyword2 = $('#keyword').val();
        MaDichVu = 'null';

        document.getElementById('test').innerHTML = keyword2;
        url = cmd + "&MaDichVu=" + MaDichVu + "&TenDiaDiem=" + TenDiaDiem + "&TenDuong=" + TenDuong + "&TenPhuong=" + TenPhuong + "&TenQuan=" + TenQuan;
       // alert('Phần này xử lý khó nhất');
        //alert(url);
        return url;
    }
}
// ============================ filter keyword ==========================

function filterKeyword(arr, MaDichVu) {
    var url;
    //var MaDichVu = 'null';
    var keyword = $('#keyword').val();
    var strFind = keyword == null ? 'null' : keyword;
    var TenDiaDiem = 'null';
    var TenDuong = 'null';
    var TenQuan = 'null';
    var TenPhuong = 'null';
    var cmd = "cmd=search";
    var indexArray = new Array(6); //3x3
    for (i = 0; i < 6; i++)
        indexArray[i] = -1;

    indexArray[1] = "duong";
    indexArray[3] = "phuong";
    indexArray[5] = "quan";
    /*              Ma trận chỉ mục         
    +-------------------+--------------+
    | index in keyword[]| type keyword | 
    +-------------------+--------------+
    0       |0.                 |1.  duong     |
    +-------------------+--------------
    1       |2.                 |3.  phuong    |
    +-------------------+--------------+
    2       |4.                 |5.  quan      |
    +-------------------+--------------+
    Ví dụ chuỗi nhập vào là :" duong nguyen huy tien phuong son ky quan tan phu";
    +-------------------+--------------+
    | index in keyword[]| type keyword | 
    +-------------------+--------------+
    0       |0.     1           |1.  duong     |
    +-------------------+--------------+
    1       |2.     4           |3.  phuong    |
    +-------------------+--------------+
    2       |4.     7           |5.  quan      |
    +-------------------+--------------+
    */

    /*
    Lưu lại xem có bao nhiêu dòng trên được chọn. Tối đa là 3 dòng.
    Vì khi nhập user có thể nhập thiếu phường, quận hoặc đường
    */
    var nSelect = 0;

    /*
    Duyệt vòng for xem trong arr của keyword có chứa các từ khóa gồm : duong, phuong, quan hay không
    Nếu có :
    + Cập nhận nSelect ++;
    + Đánh chỉ mục cho nó xem nằm ở phần từ thứ mấy trong arr của keyword;
                                        
    */
    for (i = 0; i < arr.length; i++) {
        switch (arr[i]) {
            /* Ca */ 
            case 'duong': 
                {
                    indexArray[0] = i; //danh dau key word thu may (index)
                    nSelect++;
                    break;
                }
            case 'phuong': 
                {
                    indexArray[2] = i;
                    nSelect++;
                    break;
                }

            case 'quan': 
                {
                    indexArray[4] = i;
                    nSelect++;
                    break;
                }

        }
    }

    //alert(nSelect);
    //alert(indexArray);
    /*
    Duyệt lại mảng này lấy các dòng đạt chuẩn cho vào mảng mới (Table có thêm trường value)
                                                
    ===> INDEX_list
    +---------------+--------------+
    | index |  key  |  value       |
    +-------+-------+--------------+
    |0.     | duong |              |
    +-------+-------+--------------+
    |3.     | phuong|              |
    +-------+-------+--------------+
    |4.     | quan  |              |
    +-------+-------+--------------+
                                        
    */

    if (nSelect == 0) {
        TenDiaDiem = '';
        for (i = 0; i < arr.length; i++)
            if (i == arr.length - 1)
                TenDiaDiem += arr[i];
            else
                TenDiaDiem += arr[i] + ' ';
        //return;
    }
    else {
        var n = nSelect * 3;
        /*
        Chuyện vector thành ma trận nSelect dòng x 3 cột (index, key, value)
        */
        var indexList = new Array(n); // Tạo 1 MANG MỚI
        //Gán truong value = null;
        for (i = 2; i < n; i = i + 3)
            indexList[i] = "";
        // gán truong index = -1;
        for (i = 0; i < n; i = i + 3)
            indexList[i] = -1;

        //alert(indexList);

        var k = 0; // Dùng cho chuyển phần từ từ mảng lớn sang mảng nhỏ ( indexArray --> indexList)
        for (i = 0; i < indexArray.length; i = i + 2) {
            if (indexArray[i] != -1) {// Nếu dòng user có nhập từ khóa đó : vd ko nhập từ đường, phuongm hay quan

                /*=> Chuyển index qua*/
                indexList[k] = indexArray[i];
                /*
                Do đặt tính trong javascript không cho cộng trực tiến trong index mảng nên phải làm như vầy
                */
                kk = k + 1; // index phần từ tiếp theo của indexList
                ii = i + 1; // index phần từ tiếp theo của indexArray
                kkk = k + 2; // // index phần từ tiếp theo thứ 2 của indexList
                //alert(indexArray[ii]);

                /*=> Chuyển key qua*/
                indexList[kk] = indexArray[ii];

                /*=> Tăng lên 3 trong array tức là nhảy xuống dòng 2 trong table(matran mxn)*/
                k = k + 3;
            }
        }

        //alert(k);
        //alert(indexList);

        /*
        Sắp xếp mảng lại theo thứ tụ của từ khóa nhập vào
        Muc đích lấy value cho đúng với key với thứ tự keyword nhập vào
        VD : phuong tan son nhi ==> key:phuong & value:tan son nhi;
        Vd : duong nguyen huu tien quan tan phu phuong son ky
        +---------------+--------------+
        | index |  key  |  value       |
        +-------+-------+--------------+
        |0.  0  | duong |              |
        +-------+-------+--------------+
        |3.  7  | phuong|              |
        +-------+-------+--------------+
        |4.  4  | quan  |              |
        +-------+-------+--------------+
        ===> 
        +---------------+------------------------------+
        | index |  key  |  value                       |
        +-------+-------+------------------------------+
        |0.  0  | duong | arr[0+1] ... arr[4-1]        |
        +-------+-------+------------------------------+
        |3.  4  | quan  | arr[4+1] ... arr[6-1]        |
        +-------+-------+------------------------------+
        |4.  6  | phuong| arr[6+1] ... arr[arr.lenth-1]|
        +-------+-------+------------------------------+
        */

        for (i = 0; i < n; i = i + 3) {
            for (j = i + 3; j < n; j = j + 3) {
                if (indexList[i] > indexList[j]) {

                    /*=> Hoán vị index */
                    var tmp = indexList[i];
                    indexList[i] = indexList[j];
                    indexList[j] = tmp;
                    // nói rồi - ơ trên
                    ii = i + 1;
                    jj = j + 1;
                    iii = i + 2;

                    /*=> Hoán vị key */
                    var tmp2 = indexList[ii];
                    indexList[ii] = indexList[jj];
                    indexList[jj] = tmp2;

                    /*=> Hoán vị value ===> Ko cần vì giá trị lúc này = null */
                    //tmp = indexList[iii];
                    //indexList[iii]=indexList[iii];
                    //indexList[iii]=tmp;
                }
            }
        }

        //alert(indexList);

        if (indexList[0] != 0) {
            TenDiaDiem = '';
            //alert("TenDiaDiem=" + indexList[0]);
            for (i = 0; i < indexList[0]; i++)
                TenDiaDiem += arr[i] + " ";
        }
        // Bắt đầy hốt xác lấy lúa value
        for (i = 0; i < n; i = i + 3) {
            // nói rồi - 73 trên
            ii = i + 2;
            iii = i + 3;
            // Lấy chỉ số bắt đầu lấy value cho key i;
            var start = indexList[i] + 1;
            var end;
            /*
            Nếu là dòng cuối thì lấy end là length của arr
            Ngược lại thì lấy dòng tiếp theo  - 1 ;
            */
            if (iii < n)
                end = indexList[iii] - 1;
            else
                end = arr.length - 1;

            //alert("start=" +start);
            //alert("end="+end);

            // Duyệt lấy value = + chuỗi của các phần tử lại với nhau
            for (j = start; j <= end; j++)
                indexList[ii] += arr[j] + " ";
        }

        //alert(indexList);
        //alert(TenDiaDiem);
        for (i = 1; i < indexList.length; i = i + 3) {
            switch (indexList[i]) {
                case 'duong': 
                    {
                        ii = i + 1;
                        TenDuong = $.trim(indexList[ii]);
                        break;
                    }
                case 'phuong': 
                    {
                        ii = i + 1;
                        TenPhuong = 'phuong ' + $.trim(indexList[ii]);
                        break;
                    }

                case 'quan': 
                    {
                        ii = i + 1;
                        TenQuan = 'quan ' + $.trim(indexList[ii]);
                        break;
                    }
            }
        }
    }
    url = cmd + "&MaDichVu=" + MaDichVu + "&TenDiaDiem=" + TenDiaDiem + "&TenDuong=" + TenDuong + "&TenPhuong=" + TenPhuong + "&TenQuan=" + TenQuan;
    return url;

}
// ==================== NHÓM HÀM PHỤ TRỢ ==================================

function getLoaiDichVu(keyword) {
    var key = locdau(keyword);
    var arrKey = key.split(' ');
    var iarrKey = '';
    var LoaiDichVu = 'null';
    /*----------------------------------Chua su dung--------------------------------*/
    var strDichVu = "21,8-20,7-24,5-24,14-23,7-23,16-23,8-23,25-22,18-22,15-22,6";
    var arrDichVu = strDichVu.split('-');
    var isDichVu = -1;
    /*-----------------------------------------------------------------------------*/

    for (i = 0; i < 6; i++) {     

        iarrKey += arrKey[i] + ' ';
        //alert("iarrKey="+iarrKey)
        if (iarrKey == 'sieu thi ') { LoaiDichVu = "21,8"; isDichVu = 0; i = 6; }
        if (iarrKey == 'nha tro ') { LoaiDichVu = "20,7"; isDichVu = 1; i = 6; }
		if (iarrKey == 'phong tro ') { LoaiDichVu = "20,9"; isDichVu = 1; i = 6; }
        if (iarrKey == 'do go ') { LoaiDichVu = "24,5"; isDichVu = 2; i = 6; }
        if (iarrKey == 'cua hang ') { LoaiDichVu = "24,8"; isDichVu = 3; }
        else if (iarrKey == 'cua hang do go ') { LoaiDichVu = "24,14"; isDichVu = 3; i = 6; }
        if (iarrKey == 'kim khi ') { LoaiDichVu = "23,7"; isDichVu = 4; }
        else if (iarrKey == 'kim khi dien may ') { LoaiDichVu = "23,16"; isDichVu = 6; i = 6; }
        if (iarrKey == 'dien may ') { LoaiDichVu = "23,8"; isDichVu = 5; i = 6; }

        if (iarrKey == 'cua hang kim khi dien may ') { LoaiDichVu = "23,25"; isDichVu = 7; i = 6; }

        if (iarrKey == 'co quan hanh chinh ') { LoaiDichVu = "22,18"; isDichVu = 8; i = 6; }

        if (iarrKey == 'uy ban ') { LoaiDichVu = "22,6"; isDichVu = 10; }
        else if (iarrKey == 'uy ban nhan dan ') { LoaiDichVu = "22,15"; isDichVu = 9; i = 6; }
        

        //trung
        if (arrKey[i] == 'sieu' || arrKey[i] == 'nha' || arrKey[i] == 'phong' || arrKey[i] == 'do' || arrKey[i] == 'cua'
            || arrKey[i] == 'kim' || arrKey[i] == 'dien' || arrKey[i] == 'co' || arrKey[i] == 'uy')
            iarrKey = arrKey[i] + ' ';

    } // end for

    //alert(arrDichVu[isDichVu]);
    return LoaiDichVu;
}

function getMaDichVu2(isFound) {
    if (isFound == 0) {
        var key = ChuanHoaChuoi($('#keyword').val());
        if (key == 'sieu thi') {
            isFound = 1;
            return LoaiDichVu = "21,8"; // 21 là ma dic vu, 8 là lay subtring tiep theo đe tim
        }
        if (key == 'nha tro') {
            isFound = 1;
            return LoaiDichVu = "20,7";
        }

        if (key == 'co quan hanh chinh') {
            isFound = 1;
            return LoaiDichVu = "22,18";
        }

        if (key == 'cua hang do go') {
            isFound = 1;
            return LoaiDichVu = "24,14";
        }

        if (key == 'cua hang kim khi dien may') {
            isFound = 1;
            return LoaiDichVu = "23,25";
        }
        if (key == null || key == '') {
            isFound = 0;
            LoaiDichVu = 'null';
        }
    }
}
// ====================== LỌC DẤU ========================================
function locdau(keyword) {
    /*!
    code by Minit - www.canthoit.info - 13-05-2009
    var str = (document.getElementById("title").value);
                
    */
    var str = keyword;
    str = str.toLowerCase();
    str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a");
    str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e");
    str = str.replace(/ì|í|ị|ỉ|ĩ/g, "i");
    str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o");
    str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u");
    str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y");
    str = str.replace(/đ/g, "d");
    str = str.replace(/!|@|\$|%|\^|\*|\(|\)|\+|\=|\<|\>|\?|\/|\:|\'| |\"|\&|\#|\[|\]|~/g, " ");
    str = str.replace(/-+-/g, ""); //thay thế 2- thành 1-
    str = str.replace(/^\-+|\-+$/g, ""); //cắt bỏ ký tự - ở đầu và cuối chuỗi
    return str;
}


//  ====================== CẮT CHUỖI KEY WORD THANH MANG - for search1() ========================================
function ChuanHoaChuoi(keyword) {
    var str = locdau(keyword)
    var keywordArray = str.split(",");
    return keywordArray;
}
//src: http://stackoverflow.com/questions/149573/check-if-option-is-selected-with-jquery-if-not-select-a-default ;
function selectOption(select_id, option_val) {
    $('#' + select_id + ' option:selected').removeAttr('selected');
    $('#' + select_id + ' option[value=' + option_val + ']').attr('selected', 'selected');
}

// ==============================================SEARCH ADVANCED (search1 : 1(NUMBER ONE)==================================================
function search1(keyword) {
    //var MaDichVu = document.getElementById('cboDichVu').value;
    var MaDichVu = 'null';
    var strFind = keyword == null ? 'null' : keyword;
    var TenDiaDiem = 'null';
    var TenDuong = 'null';
    var TenQuan = 'null';
    var TenPhuong = 'null';
    var keywordArray = locdau(keyword).split(',');
    //alert(keywordArray+ ";" + keywordArray.length);
    // nếu keyword bị null thì tìm theo ma dich vu thôi
    if (keywordArray[0] == '') {
        // keyword rỗng
        alert('Từ khóa rỗng')
        return false;
    }
    else {
        /*
        Xử lý lấy MaDichVu trước
        */
        MaDichVu = getLoaiDichVu(keywordArray[0]).split(',')[0];
        switch (keywordArray.length) {
            case 5: // Chuẩn FULL : <Ten Dia Diem>, <Duong>, <Phuong>, <Quan>  : Theo thứ tự không được thay đổi
                {
                    TenDiaDiem = $.trim(keywordArray[1]);
                    TenDuong = $.trim(keywordArray[2]);
                    TenPhuong = $.trim(keywordArray[3]);
                    TenQuan = $.trim(keywordArray[4]);
                    //std = 4;
                    break;
                }
            case 4: // Chuẩn rút gọn 1.1: <Ten Dia Diem>, <Duong>, <Quan>
                {
                    TenDiaDiem = $.trim(keywordArray[1]);
                    TenDuong = $.trim(keywordArray[2]);
                    TenQuan = $.trim(keywordArray[3]);
                    TenPhuong = 'null';
                    //std = 3;
                    break;
                }
            case 3: // Chuẩn rút gọn 1.2 input là 2 thông tin
                {
                    // Nếu tìm dịch vụ nhà trọ thì không cần tên địa điểm
                    // ==> Input : <Duong>, <Quan>
                    if (MaDichVu == 20) {
                        //alert('20');
                        TenDiaDiem = 'null';
                        TenDuong = $.trim(keywordArray[1]);
                        TenQuan = $.trim(keywordArray[2]);
                        TenPhuong = 'null';
                        //std = 2;
                    }
                    else {
                        // Input : <Ten Dia Diem>, <Quan>
                        // OR
                        // Input : <Ten Dia Diem>, <Phuong>
                        // Chú ý : Rơi vào 2 trường hợp như trên.
                        // =====> Nhưng ở đây chỉ xử lý trường hợp <Ten Dia Diem>, <Quan> thôi.
                        TenDiaDiem = $.trim(keywordArray[1]);
                        TenDuong = $.trim(keywordArray[2]);
                        TenQuan = $.trim(keywordArray[2]);
                        TenPhuong = 'null';
                    }
                    break;
                }
            case 2: // Chuẩn simple : Chỉ 1 thông tin, gán toàn bộ
                {
                    // ==> Input : q.3,quan3, q3,...)
                    if ($.trim(keywordArray[1]).split('.')[1] == 'q' || $.trim(keywordArray[1]).substr(0, 4) == 'quan' ||
                                                        ($.trim(keywordArray[1]).substr(0, 1) == 'q'
                                                                &&
                                                                isNaN($.trim(keywordArray[1]).substr(1, 1)) == false
                                                        )
                                                ) {
                        //alert('q11');
                        TenDiaDiem = 'null';
                        TenDuong = 'null';
                        TenQuan = $.trim(keywordArray[1]);
                        TenPhuong = 'null';
                    }
                    else
                        if ($.trim(keywordArray[1]).split('.')[1] == 'p' || $.trim(keywordArray[1]).substr(0, 4) == 'phuong' ||
                                                        ($.trim(keywordArray[1]).substr(0, 1) == 'p'
                                                                &&
                                                                isNaN($.trim(keywordArray[1]).substr(1, 1)) == false
                                                        )
                                                        ) {
                            TenDiaDiem = 'null';
                            TenDuong = 'null';
                            TenQuan = 'null'
                            TenPhuong = $.trim(keywordArray[1]);
                        }
                        else {
                            TenDiaDiem = $.trim(keywordArray[1]);
                            TenDuong = $.trim(keywordArray[1]);
                            TenQuan = $.trim(keywordArray[1]);
                            TenPhuong = $.trim(keywordArray[1]);
                        }
                    break;
                }
        }
        url = 'cmd=search&MaDichVu=' + MaDichVu + "&TenDiaDiem=" + TenDiaDiem + "&TenDuong=" + TenDuong + "&TenPhuong=" + TenPhuong + "&TenQuan=" + TenQuan + "&strFind=" + strFind;
        //alert("keywordArrat[0]!=null; url="+ url);
        //alert(url);
        // Ghi chuỗi tìm kiếm xuống label
        //document.getElementById('lbl_keyword').innerHTML = strFind;

        //window.location = url ;
    } // end keyword[0] !null

    return url;
} // end function search1

// khi nhấn nút trang
function partClick(p, part) {
    var strData = 'trang=' + p + "&part=" + part;
    $('#result').slideUp(300);
    document.getElementById('result').innerHTML = '';
    $.ajax({
        url: 'ajaxActions.aspx',
        type: 'GET',
        data: strData,
        timeout: 30000,
        error: function () {
            alert('Có lỗi ở Server');
        },
        success: function (msg) {
            //$('#loading').css('background','');
            document.getElementById('result').innerHTML = msg;
            $('#result').show('500');
        }
    }); // Ajax
}
function pageClick(p,part) {
    var strData = 'trang=' + p + "&part=" + part;
    $('#result').slideUp(300);
    document.getElementById('result').innerHTML = '';
    $.ajax({
        url: 'ajaxActions.aspx',
        type: 'GET',
        data: strData,
        timeout: 30000,
        error: function () {
            alert('Có lỗi ở Server');
        },
        success: function (msg) {
            //$('#loading').css('background','');
            document.getElementById('result').innerHTML = msg;
            $('#result').show('500');
        }
    }); // Ajax
}

// ================ NHÓM HÀM DISBALE =============================
/*
//  Tooltip
$('#keyword').tooltip({
// place tooltip on the right edge
position: "center right",

// a little tweaking of the position
offset: [-2, -100],

// use the built-in fadeIn/fadeOut effect
effect: "fade",

// custom opacity setting
opacity: 0.7
});
function IsNumeric(input) {
return /^-?(0|[1-9]\d*|(?=\.))(\.\d+)?$/.test(input);
}
*/
/*
Thuật toán FULL General
if(keyword có dấu phẩi)
Tìm theo dấu phẩy --> search1)
else
keyword không có dấu phẩy --> search2
*/